IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name='spSeguridadUsuario_Insert' and XTYPE='P')
BEGIN
	DROP PROCEDURE [dbo].[spSeguridadUsuario_Insert]
END
GO
CREATE PROCEDURE [dbo].[spSeguridadUsuario_Insert]
	 @OP VARCHAR(64)=NULL
	,@ParamAuxiliar NVARCHAR(MAX)=NULL
	,@Id INT=NULL
	,@CodRol VARCHAR(16)=NULL
	,@CodUsuario VARCHAR(16)=NULL
	,@Login VARCHAR(32)=NULL
	,@UserName VARCHAR(64)=NULL
	,@Password VARCHAR(MAX)=NULL
	,@Activo BIT=NULL
WITH ENCRYPTION
AS
SET NOCOUNT ON;
BEGIN TRY

--/**** VERIFICAR SI LA SESSION DE USUARIO ESTA ACTIVA ****/
-------EXEC SP_ExecuteSQL N'dbo.spSeguridadUsuario @OP=''VerificarSessionActiva'''
--/**** FIN - VERIFICAR SI LA SESSION DE USUARIO ESTA ACTIVA ****/--DECLARE @ERROR VARCHAR(500)

--DECLARE @ERROR INT

/*****     OPERACION POR DEFECTO    *****/
IF @OP IS NULL OR @OP = ''
BEGIN
	BEGIN TRANSACTION
	INSERT INTO [dbo].[SeguridadUsuario]
		(
		 [CodRol]
		,[CodUsuario]
		,[Login]
		,[UserName]
		,[Password]
		,[Activo]
		)
	VALUES
		(
		 @CodRol
		,@CodUsuario
		,@Login
		,@UserName
		,@Password
		,@Activo
		)

	--SET @ERROR=@@ERROR
	--IF @ERROR<>0 BEGIN ROLLBACK TRANSACTION RETURN 1 END

	---- Si la tabla Tiene una columna IDENTITY, Devuelvo el registro del ultimo Indentity INSERTADO
	---- (Esto se hace para que .NET Trabaje correctamente)
	SELECT 
		 t.Id
		,t.CodRol
		,t.CodUsuario
		,t.[Login]
		,t.UserName
		,t.[Password]
		,t.Activo 
	FROM 
		[dbo].[SeguridadUsuario] t
	WHERE t.[Id]=SCOPE_IDENTITY()

	--SET @ERROR=@@ERROR
	--IF @ERROR<>0 BEGIN ROLLBACK TRANSACTION RETURN 1 END
	COMMIT TRANSACTION
	RETURN 0
END

--- Si se llega a este punto es porque el @OP indicado no Existe en el Procedimiento Almacenado
IF @OP IS NOT NULL
	BEGIN
	SET @ParamAuxiliar='La Operacion "'+@OP+'" No esta definida en el Procedimiento almacenado "'+OBJECT_NAME(@@PROCID)+'", Revise!.'
	RAISERROR(@ParamAuxiliar,16,1)
	RETURN 1
END

--- CONTROLAR Y REGISTRAR LOS ERRORES
END TRY
BEGIN CATCH
	--- Recopilo la informacion del error
	DECLARE @ERROR_NUMBER INT=ERROR_NUMBER(),@ERROR_SEVERITY INT=ERROR_SEVERITY(),@ERROR_STATE INT=ERROR_STATE(),@ERROR_PROCEDURE VARCHAR(128)=ERROR_PROCEDURE(),@ERROR_LINE INT=ERROR_LINE(),@ERROR_MESSAGE VARCHAR(2048)=ERROR_MESSAGE()
	--- Si hay transacciones abiertas, hago un rollback, SE ENCIERRA EN UN (TRY-CATCH) PARA QUE NO SE MUESTRE EL ERROR: Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT
	IF(@@TRANCOUNT>0) BEGIN BEGIN TRY ROLLBACK TRANSACTION END TRY BEGIN CATCH END CATCH END
	--- Ejecuto el SP que controla y registra el error
	EXEC [spSeguridadMessageException] @OP='MostrarMensaje',@ERROR_NUMBER=@ERROR_NUMBER,@ERROR_SEVERITY=@ERROR_SEVERITY,@ERROR_STATE=@ERROR_STATE,@ERROR_PROCEDURE=@ERROR_PROCEDURE,@ERROR_LINE=@ERROR_LINE,@ERROR_MESSAGE=@ERROR_MESSAGE
	RETURN 1
END CATCH;

----- CONTROLAR EL ERROR
--END TRY
--BEGIN CATCH
--	--- Si hay transacciones abiertas, hago un rollback, SE ENCIERRA EN UN (TRY-CATCH) PARA QUE NO SE MUESTRE EL ERROR: Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT	
--	IF(@@TRANCOUNT>0) BEGIN BEGIN TRY ROLLBACK TRANSACTION END TRY BEGIN CATCH END CATCH END
--	--- Recopilo la informacion del error
--	DECLARE
--		 @ERROR_NUMBER INT=ERROR_NUMBER()
--		,@ERROR_SEVERITY INT=ERROR_SEVERITY()
--		,@ERROR_STATE INT=ERROR_STATE()
--		,@ERROR_PROCEDURE VARCHAR(128)=ERROR_PROCEDURE()
--		,@ERROR_LINE INT=ERROR_LINE()
--		,@ERROR_MESSAGE VARCHAR(2048)=ERROR_MESSAGE()
--	--- Ejecuto el SP que controla y registra el error	
--    EXEC [spSeguridadMessageException] 
--			 @OP='MostrarMensaje'
--			,@ERROR_NUMBER=@ERROR_NUMBER
--			,@ERROR_SEVERITY=@ERROR_SEVERITY
--			,@ERROR_STATE=@ERROR_STATE
--			,@ERROR_PROCEDURE=@ERROR_PROCEDURE
--			,@ERROR_LINE=@ERROR_LINE
--			,@ERROR_MESSAGE=@ERROR_MESSAGE
--	RETURN 1 
--END CATCH;
--GO
